
class Vue {
  constructor(options) {
    // console.log("options:", options);
    // this表示vm
    this.$options = options || {};
    this.$data = options.data || {};
    this.$el = document.querySelector(options.el)

    // 把$data中的数据挂载到vm上，处理成响应式
    this._proxyData(this.$data)

    // 调用observer, 把data中的数据处理成响应式
    new Observer(this.$data)

    // 调用Compiler，实现模板编译
    new Compiler(this)
  }
  _proxyData(data) {
    // console.log(Object.keys(data));
    Object.keys(data).forEach(key => {
      // console.log("key:", key);
      Object.defineProperty(this, key, {
        enumerable: true,
        configurable: true,
        get() {
          // console.log("get...");
          return data[key];
        },
        set(newValue) {
          if (newValue == data[key]) {
            return;
          }
          console.log("set...");
          data[key] = newValue;
        }
      })
    })
  }
}



